package com.dp.server.entities;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.PrePersist;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.envers.Audited;

import com.dp.client.dto.PaqueteDTO;

@Entity
public class Paquete 
{
	
	/*
	 * EstadoPaquete estado1 = new EstadoPaquete(1,"por entrar",1);
		EstadoPaquete estado2 = new EstadoPaquete(2,"almacen",1);
		EstadoPaquete estado3 = new EstadoPaquete(3,"vuelo",1);
	 */ 
	
	public static int POR_ENTRAR = 1;
	public static int ALMACEN = 2;
	public static int VUELO = 3;
	public static int RECOGIDO = 4;
	private int id;
	private String descripcion;
	private double costo;
	private int maxiraHoraLlegada;
	private long nroSecretoRemitente;
	private long nroSecretoDestinatario;
	private int estadoPaquete;
	private int almacenOrigen;
	private int almacenDestino;
	private int planDeVuelo;
	private int reservaDeAlmacen;
	private int clienteRemintente;
	private int clienteDestinatario;
	private int almacenActual;
	private int vueloActual;
	private Date fechaRegistro;
	private Date fechaRealLlegada;
	private Date fechaEstimadaLlegada;
	private Date fechaRecojo;
	private boolean eliminado;
	private boolean reruteo;
	public String codigo;
	private String nombAlmacenOrigen;
	private String nombAlmacenDestino;
	public String getNombAlmacenOrigen() {
		return nombAlmacenOrigen;
	}

	public void setNombAlmacenOrigen(String nombAlmacenOrigen) {
		this.nombAlmacenOrigen = nombAlmacenOrigen;
	}

	public String getNombAlmacenDestino() {
		return nombAlmacenDestino;
	}

	public void setNombAlmacenDestino(String nombAlmacenDestino) {
		this.nombAlmacenDestino = nombAlmacenDestino;
	}
	
	
	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public boolean isReruteo() {
		return reruteo;
	}

	public void setReruteo(boolean reruteo) {
		this.reruteo = reruteo;
	}

	public boolean isEliminado() {
		return eliminado;
	}

	public void setEliminado(boolean eliminado) {
		this.eliminado = eliminado;
	}

	public Paquete() {}
	
	public int getVueloActual() {
		return vueloActual;
	}

	public void setVueloActual(int vueloActual) {
		this.vueloActual = vueloActual;
	}
	
	public Paquete(PaqueteDTO paquete) {
		this.id = paquete.getId();
		this.descripcion = paquete.getDescripcion();
		this.costo = paquete.getCosto();
		this.maxiraHoraLlegada = paquete.getMaximaHoraLlegada();
		this.nroSecretoRemitente = paquete.getNroSecretoRemitente();
		this.nroSecretoDestinatario = paquete.getNroSecretoDestinatario();
		this.estadoPaquete = paquete.getEstadoPaquete();
		this.almacenOrigen = paquete.getAlmacenOrigen();
		this.almacenDestino = paquete.getAlmacenDestino();
		this.planDeVuelo = paquete.getPlanDeVuelo();
		this.reservaDeAlmacen = paquete.getReservaDeAlmacen();
		this.clienteDestinatario = paquete.getClienteDestinatario();
		this.clienteRemintente = paquete.getClienteRemitente();
		this.almacenActual=paquete.getAlmacenActual();
		this.vueloActual=paquete.getVueloActual();
		this.fechaRegistro=paquete.getFechaRegistro();
		this.fechaEstimadaLlegada=paquete.getFechaEstimadaLlegada();
		this.fechaRealLlegada=paquete.getFechaRealLlegada();
		this.fechaRecojo=paquete.getFechaRecojo();
		this.reruteo=paquete.isReruteo();
		this.codigo = paquete.getCodigo();
		this.nombAlmacenOrigen=paquete.getNombAlmacenOrigen();
		this.nombAlmacenDestino=paquete.getNombAlmacenDestino();
	}

	public Date getFechaRealLlegada() {
		return fechaRealLlegada;
	}

	public void setFechaRealLlegada(Date fechaRealLlegada) {
		this.fechaRealLlegada = fechaRealLlegada;
	}

	public Date getFechaEstimadaLlegada() {
		return fechaEstimadaLlegada;
	}

	public void setFechaEstimadaLlegada(Date fechaEstimadaLlegada) {
		this.fechaEstimadaLlegada = fechaEstimadaLlegada;
	}

	public Date getFechaRecojo() {
		return fechaRecojo;
	}

	public void setFechaRecojo(Date fechaRecojo) {
		this.fechaRecojo = fechaRecojo;
	}

	public Date getFechaRegistro() {
		return fechaRegistro;
	}

	public void setFechaRegistro(Date fechaRegistro) {
		this.fechaRegistro = fechaRegistro;
	}

	public int getAlmacenActual() {
		return almacenActual;
	}

	public void setAlmacenActual(int almacenActual) {
		this.almacenActual = almacenActual;
	}

	public int getMaxiraHoraLlegada() {
		return maxiraHoraLlegada;
	}

	public void setMaxiraHoraLlegada(int maxiraHoraLlegada) {
		this.maxiraHoraLlegada = maxiraHoraLlegada;
	}

	public int getClienteRemintente() {
		return clienteRemintente;
	}

	public void setClienteRemintente(int clienteRemintente) {
		this.clienteRemintente = clienteRemintente;
	}

	public int getClienteDestinatario() {
		return clienteDestinatario;
	}

	public void setClienteDestinatario(int clienteDestinatario) {
		this.clienteDestinatario = clienteDestinatario;
	}

	@Id
	@GeneratedValue(generator="increment")
	@GenericGenerator(name="increment", strategy = "increment")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public double getCosto() {
		return costo;
	}
	public void setCosto(double costo) {
		this.costo = costo;
	}
	public long getNroSecretoRemitente() {
		return nroSecretoRemitente;
	}
	public void setNroSecretoRemitente(long nroSecretoRemitente) {
		this.nroSecretoRemitente = nroSecretoRemitente;
	}
	public long getNroSecretoDestinatario() {
		return nroSecretoDestinatario;
	}
	public void setNroSecretoDestinatario(long nroSecretoDestinatario) {
		this.nroSecretoDestinatario = nroSecretoDestinatario;
	}
	public int getEstadoPaquete() {
		return estadoPaquete;
	}
	public void setEstadoPaquete(int estadoPaquete) {
		this.estadoPaquete = estadoPaquete;
	}
	public int getAlmacenOrigen() {
		return almacenOrigen;
	}
	public void setAlmacenOrigen(int almacenOrigen) {
		this.almacenOrigen = almacenOrigen;
	}
	public int getAlmacenDestino() {
		return almacenDestino;
	}
	public void setAlmacenDestino(int almacenDestino) {
		this.almacenDestino = almacenDestino;
	}
	public int getPlanDeVuelo() {
		return planDeVuelo;
	}
	public void setPlanDeVuelo(int planDeVuelo) {
		this.planDeVuelo = planDeVuelo;
	}
	public int getReservaDeAlmacen() {
		return reservaDeAlmacen;
	}
	public void setReservaDeAlmacen(int reservaDeAlmacen) {
		this.reservaDeAlmacen = reservaDeAlmacen;
	}
	@PrePersist
	public void onCreate(){
		this.descripcion= "";
		this.eliminado=false;
	}
	public PaqueteDTO extractDTO(){
		return new PaqueteDTO(id, descripcion, costo, maxiraHoraLlegada, nroSecretoRemitente,
				nroSecretoDestinatario,estadoPaquete, almacenDestino, almacenOrigen, reservaDeAlmacen, 
				planDeVuelo, clienteRemintente,clienteDestinatario,almacenActual,
				vueloActual,fechaRegistro,fechaRealLlegada,fechaEstimadaLlegada,fechaRecojo,reruteo,codigo,
				nombAlmacenOrigen,nombAlmacenDestino
				);
	}
	public void subirPaquete(){
		this.estadoPaquete=3;
	}
	public void bajarPaquete(){
		this.estadoPaquete=1;
	}
	public void reruteo(){
		this.reruteo=true;
		this.estadoPaquete=2;
		this.planDeVuelo = -1;
	}
}
